package cn.iocoder.yudao.module.system.service.exam;

import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.system.config.ExamTestProperties;
import cn.iocoder.yudao.module.system.util.exam.ExamTestApiClient;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import javax.annotation.Resource;

/**
 * 测评系统第三方API服务
 * 用于集成便捷数据网的测评API
 *
 * @author 芋道源码
 */
@Service
@Slf4j
public class ExamTestApiService {

    @Resource
    private ExamTestApiClient examTestApiClient;

    @Resource
    private ExamTestProperties examTestProperties;

    /**
     * 从第三方API获取测评题列表
     *
     * @param tbl 测评类型标记值
     * @return 题目数据（JSON格式）
     */
    public String fetchTestQuestionsFromApi(String tbl) {
        String appKey = examTestProperties.getAppKeyByTbl(tbl);
        log.info("开始从第三方API获取测评题列表，API Key: {}, tbl: {}",
                StrUtil.isNotBlank(appKey) ? appKey.substring(0, Math.min(8, appKey.length())) + "***" : "空",
                tbl);

        String result = examTestApiClient.getTestQuestions(tbl);
        
        if (StrUtil.isNotBlank(result)) {
            log.info("成功获取测评题列表数据");
            return result;
        } else {
            log.warn("获取测评题列表数据失败");
            return null;
        }
    }

    /**
     * 从第三方API获取测评相关信息
     *
     * @param tbl 测评类型标记值
     * @return 测评信息数据（JSON格式）
     */
    public String fetchTestInfoFromApi(String tbl) {
        String appKey = examTestProperties.getAppKeyByTbl(tbl);
        log.info("开始从第三方API获取测评信息，API Key: {}, tbl: {}",
                StrUtil.isNotBlank(appKey) ? appKey.substring(0, Math.min(8, appKey.length())) + "***" : "空",
                tbl);

        String result = examTestApiClient.getTestInfo(tbl);
        
        if (StrUtil.isNotBlank(result)) {
            log.info("成功获取测评信息数据");
            return result;
        } else {
            log.warn("获取测评信息数据失败");
            return null;
        }
    }

    /**
     * 从第三方API获取测评结果报告
     *
     * @param tbl 测评类型标记值
     * @param reportType 报告类型
     * @param answer 答案字符串
     * @param isAllAnswer 是否提交所有题目的答案
     * @return 报告数据（JSON格式）
     */
    public String fetchTestReportFromApi(String tbl, String reportType, String answer, String isAllAnswer) {
        String appKey = examTestProperties.getAppKeyByTbl(tbl);
        log.info("开始从第三方API获取测评报告，API Key: {}, tbl: {}, reportType: {}, answer: {}, isAllAnswer: {}",
                StrUtil.isNotBlank(appKey) ? appKey.substring(0, Math.min(8, appKey.length())) + "***" : "空",
                tbl, reportType,
                StrUtil.isNotBlank(answer) ? answer.substring(0, Math.min(50, answer.length())) + "..." : "空",
                isAllAnswer);

        String result = examTestApiClient.getTestReport(tbl, reportType, answer, isAllAnswer);
        
        if (StrUtil.isNotBlank(result)) {
            log.info("成功获取测评报告数据");
            return result;
        } else {
            log.warn("获取测评报告数据失败");
            return null;
        }
    }

}
